package org.redmaple.core.retrieving;

import org.redmaple.core.retrieving.type.BETWEENType;
import org.redmaple.core.retrieving.type.EQType;
import org.redmaple.core.retrieving.type.GEType;
import org.redmaple.core.retrieving.type.GTType;
import org.redmaple.core.retrieving.type.INType;
import org.redmaple.core.retrieving.type.ISNOTNULLType;
import org.redmaple.core.retrieving.type.ISNULLType;
import org.redmaple.core.retrieving.type.LEType;
import org.redmaple.core.retrieving.type.LIKEType;
import org.redmaple.core.retrieving.type.LLIKEType;
import org.redmaple.core.retrieving.type.LTType;
import org.redmaple.core.retrieving.type.NEQType;
import org.redmaple.core.retrieving.type.RLIKEType;
import org.redmaple.core.retrieving.type.Type;

/**
 * 检索类型枚举
 * 
 * @author Xiangyun
 *
 */
public enum RetrievingType {
	
	/**
	 * 相等，适用于任何类型
	 */
	EQ("EQ", new EQType()),
	
	/**
	 * 不相等，适用于任何类型
	 */
	NEQ("NEQ", new NEQType()),
	
	/**
	 * 中间相似，只适用于字符串
	 */
	LIKE("LIKE", new LIKEType()),
	
	/**
	 * 左边相似，只适用于字符串
	 */
	LLIKE("LLIKE", new LLIKEType()),
	
	/**
	 * 右边相似，只适用于字符串
	 */
	RLIKE("RLIKE", new RLIKEType()),
	
	/**
	 * 介于两者之间，适用于任何类型
	 */
	BETWEEN("BETWEEN", new BETWEENType()),
	
	/**
	 * 属性为空，适用于任何类型
	 */
	ISNULL("ISNULL", new ISNULLType()),
	
	/**
	 * 属性不能为空，适用于任何类型
	 */
	ISNOTNULL("ISNOTNULL", new ISNOTNULLType()),
	
	/**
	 * 大于，适用于任何类型
	 */
	GT("GT", new GTType()),
	
	/**
	 * 大于或等于，适用于任何类型
	 */
	GE("GE", new GEType()),
	
	/**
	 * 小于，适用于任何类型
	 */
	LT("LT", new LTType()),
	
	/**
	 * 小于或等于，适用于任何类型
	 */
	LE("LE", new LEType()),
	
	/**
	 * 在其值内，适用于任何类型
	 */
	IN("IN", new INType());
	
	/**
	 * 前缀名称
	 */
	private String prefix;
	
	private Type type;
	
	private RetrievingType(String prefix, Type type) {
		this.prefix = prefix;
		this.type = type;
	}
	
	public String getPrefix() {
		return this.prefix;
	}
	
	public Type getType() {
		return this.type;
	}
}
